package com.atguigu.bigdata.scala.chapter06

object Scala10_Object_Extends {
    def main(args: Array[String]): Unit = {

        // TODO 面向对象编程 - 继承
//         scala和java一样，只支持类的单继承
//         继承的目的，其实就是共用数据
//         多个类具有相同的特征的时候，把这些特征抽取出来，形成父类。
//         父子类的构造顺序

        val user = new User("zhangsan");

//         1. 子类在初始化之前，需要首先将父类初始化
//         2. 辅助构造方法必须最开始需要直接或间接调用主构造方法，然后再完成自己的辅助操作
//         3. 如果函数(辅助构造方法)只有声明，没有调用，就不会执行
//         4. 类的初始化，其实就是类的主体内容全部执行一遍

    }
    class Person() {
        println("1111")
        def this(name:String) {
            //调用Person的主构造方法
            this()
            println("2222")
        }
    }
    class User() extends Person() {
        println("3333")
        def this(name:String) {
            //调用User的主构造方法,先用Person() 初始化父类,因为没有调用Person的辅助构造器所以不执行,可以使用Person("aa")调用
            //再初始化子类
            this()
            //再
            println("4444")
        }
        println("5555")
    }

    // 1111
    // 3333
    // 5555
    // 4444
}